﻿using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using SeguroSoft.Models;
using SeguroSoft.Tests.Fakes;

namespace SeguroSoft.Tests.Model
{
    /// <summary>
    /// Summary description for TestRepositorioSeguro
    /// </summary>
    [TestClass]
    public class TestRepositorioSeguro
    {
        
        List<Seguro> crearSegurosTest()
        {
            List<Seguro> segurosTest = new List<Seguro>();

            for (int i = 0; i < 100; i++)
            {
                Seguro muestraSeguro = new Seguro()
                {
                    Año = new Random().Next(1989, 2010),
                    Deducible = 100000 + i,
                    IDSeguros = i,
                    Marca = "Porsche",
                    Modelo = "Carrera GT",
                    Prima = 50000 + i,
                    IDCompañiaSe = i
                };

                segurosTest.Add(muestraSeguro);
            }

            return segurosTest;
        }

        FakeRepositorioSeguro crearRepositorioFalso()
        {
            var repositorioFalso = new FakeRepositorioSeguro(crearSegurosTest());
            return repositorioFalso;
        }

        [TestMethod]
        public void Seguros_No_Encontrados_Con_Parametros_Inexistentes()
        {
            var repositorioFalso = crearRepositorioFalso();

            var result = repositorioFalso.EncontrarSegurosPorAño(2011);

            Assert.AreEqual(result.ToList().Count, 0);
        }

        [TestMethod]
        public void Todos_Los_Seguros_Deberian_Ser_Encontrados()
        {
            var repositorioFalso = crearRepositorioFalso();

            var result = repositorioFalso.EncontrarTodosLosSeguros();

            Assert.AreEqual(result.ToList().Count, 100);
        }

        [TestMethod]
        public void Seguros_Encontrados_Segun_Deducible()
        {
            var repositorioFalso = crearRepositorioFalso();

            var result = repositorioFalso.EncontrarSegurosPorDeducible(1, 100056);

            Assert.AreEqual(result.ToList().Count, 43);
        }

        [TestMethod]
        public void Seguros_Encontrados_Segun_Prima()
        {
            var repositorioFalso = crearRepositorioFalso();

            var result = repositorioFalso.EncontrarSegurosPorPrima(9, 50056);

            Assert.IsInstanceOfType(result.ToList().ElementAt(0), typeof (Seguro));
        }

        [TestMethod]
        public void Seguros_Encontrados_Segun_Modelo()
        {
            var repositorioFalso = crearRepositorioFalso();

            var result = repositorioFalso.EncontrarSegurosPorModelo("Enzo");

            Assert.AreEqual(result.ToList().Count, 0);
        }

        [TestMethod]
        public void Seguros_Encontrados_Segun_Marca()
        {
            var repositorioFalso = crearRepositorioFalso();

            var result = repositorioFalso.EncontrarSegurosPorMarca("Porsche");

            Assert.AreEqual(result.ToList().Count, 100);
        }

        [TestMethod]
        public void Seguro_Encontrado_Segun_Identificador()
        {
            var repositorioFalso = crearRepositorioFalso();

            var result = repositorioFalso.ObtenerSeguro(50);

            Assert.AreEqual(result.Deducible, 100050);
        }
    }
}